package cn.csc.framework.pay.core.client.impl.lkl.dto;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.google.gson.annotations.SerializedName;
import com.lkl.laop.sdk.request.model.V3LabsTradeAccBusiFieldInfo;
import lombok.Getter;
import lombok.Setter;

/**
 * 聚合主扫返回
 * @author liuchuang
 * @version 1.0
 * @date 2023/11/4 11:25
 * @modify
 */
@Getter
@Setter
public class V3LabsTransPreorderResponse extends V3CommResponse{

    /**
     * merchant_no	商户号	M	String(32)	拉卡拉分配的商户号（请求接口中商户号）
     * out_trade_no	商户请求流水号	M	String(32)	请求报文中的商户请求流水号
     * trade_no	拉卡拉交易流水号	M	String(32)	拉卡拉交易流水号
     * log_no	拉卡拉对账单流水号	M	String(14)	拉卡拉对账单流水号
     * settle_merchant_no	结算商户号	M	String(32)	拉卡拉分配的商户号
     * settle_term_no	结算终端号	M	String(32)	拉卡拉分配的业务终端号
     * acc_resp_fields	账户端返回信息域	C	Object	账户端返回信息域
     */

    @SerializedName("resp_data")
    @JsonProperty("resp_data")
    private V3LabsTransPreorderRespData respData;

    /**
     * 聚合主扫返回的resp_data属性
     */
    @Getter
    @Setter
    public static class V3LabsTransPreorderRespData extends V3CommRespData{

        @SerializedName("merchant_no")
        @JsonProperty("merchant_no")
        private String merchantNo;

        @SerializedName("log_no")
        @JsonProperty("log_no")
        private String logNo;

        @SerializedName("settle_merchant_no")
        @JsonProperty("settle_merchant_no")
        private String settleMerchantNo;

        @SerializedName("settle_term_no")
        @JsonProperty("settle_term_no")
        private String settleTermNo;

        /**
         * json格式字符串
         * {
         *     "code": "https://qr.test.95516.com/UP02/qrcGtwWeb-web/front/confirmOrder?sessionId=c0b60813735d42838e761e47a84e000a",
         *     "code_image": "",
         *     "prepay_id": "",
         *     "pay_sign": "",
         *     "time_stamp": "",
         *     "nonce_str": "",
         *     "package": "",
         *     "sign_type": "",
         *     "redirect_url": "",
         *     "best_pay_info": ""
         * }
         */
        @SerializedName("acc_resp_fields")
        @JsonProperty("acc_resp_fields")
        private AccRespFields accRespFields;

        public static class AccRespFields{}

        @Setter
        @Getter
        public class Alipay41AccRespFields extends AccRespFields {

            /**
             * code	二维码信息	M	String(256)	商户可用此参数自定义去生成二维码后展示出来进行扫码支付
             * code_image	二维码图片内容	M	String(256)	商户收款二维码图片。Base64编码，暂无
             * */

            @SerializedName("code")
            @JsonProperty("code")
            private String code;

            @SerializedName("code_image")
            @JsonProperty("code_image")
            private String codeImage;

        }

        @Setter
        @Getter
        public class Alipay51AccRespFields extends AccRespFields {

            /**
             * prepay_id	预下单Id	M	String(32)	预支付交易会话ID
             * */

            @SerializedName("prepay_id")
            @JsonProperty("prepay_id")
            private String prepayId;
        }

        @Setter
        @Getter
        public class Alipay81AccRespFields extends AccRespFields {

            /**
             * form_data	为开发者生成前台页面请求需要的完整form 表单的 html（不包含自动提交脚本），商户可决定是否直接提交 form 表单，如需要直接提交的，可将这个表单的 String 加自动提交脚本输出到 http response 中，如不需要直接提交的，可以自行决定中间处理过程，但提交至支付宝侧的 form 表达内容不可修改，否则会引起支付宝侧报错。	M	String(128)	为银联支付宝H5支付时，为开发者生成前台页面请求需要的完整form 表单的 html
             * */

            @SerializedName("form_data")
            @JsonProperty("form_data")
            private String formData;
        }

        @Getter
        @Setter
        public static class Wechat71AccRespFields extends AccRespFields {

            /**
             * prepay_id	预下单Id	M	String(32)	预支付交易会话ID
             * pay_sign	支付签名信息	M	String(256)	签名
             * app_id	小程序id	M	String(32)	商户注册具有支付权限的小程序成功后即可获得小程序id
             * time_stamp	时间戳	M	String(32)	当前的时间
             * nonce_str	随机字符串	M	String(32)	随机字符串
             * package	订单详情扩展字符串	M	String(128)
             * sign_type	签名方式	M	String(32)	签名类型，支持RSA
             */

            @SerializedName("prepay_id")
            @JsonProperty("prepay_id")
            private String prepayId;

            @SerializedName("pay_sign")
            @JsonProperty("pay_sign")
            private String paySign;

            @SerializedName("app_id")
            @JsonProperty("app_id")
            private String appId;

            @SerializedName("time_stamp")
            @JsonProperty("time_stamp")
            private String timeStamp;

            @SerializedName("nonce_str")
            @JsonProperty("nonce_str")
            private String nonceStr;

            @SerializedName("package")
            @JsonProperty("package")
            private String packageInfo;

            @SerializedName("sign_type")
            @JsonProperty("sign_type")
            private String signType;
        }

        @Getter
        @Setter
        public class V3LabsTransPreorderUnionPayAccRespFields extends AccRespFields {

            /**
             * user_id	用户id	C	String(64)	JS获取用户标识返回码不为34时，必送（ https://open.unionpay.com/tjweb/api/interface?apiSvcId=579&id=804 ）
             * timeout_express	预下单有效时间	C	String(2)	预下单的订单的有效时间，以分钟为单位。如果在有效时间内没有完成付款，则在账户端该订单失效。如果不上送，以账户端订单失效时间为准。 建议不超过15分钟。不传值则默认5分钟。
             * acq_addn_data_order_info	银联订单信息(暂不支持)	C	String(600)	银联单品营销订单信息
             * acq_addn_data_goods_info	银联商品信息(暂不支持)	C	String(6000)	银联单品营销商品信息
             * front_url	银联前台通知地址	C	String(256)	收款方向银联推送订单时上送的前台通知地址（仅允许为外网地址），用户完成支付点击，“返回”后，银联通过浏览器POST请求到该地址。 当transType为JSAPI，payMode为UQRCODEPAY时，可选填此字段
             * front_fail_url	银联失败交易前台通知地址	C	String(256)	收款方向银联推送订单时上送的失败交易前台通知地址（仅允许为外网地址），用户支付过程中交易失败，点击“返回”后，银联通过浏览器GET请求到该地址。 当transType为JSAPI，payMode为UQRCODEPAY时，可选填此字段，需与frontUrl同时出现，未上送默认为frontUrl的值
             */

            @SerializedName("user_id")
            @JsonProperty("user_id")
            private String userId;

            @SerializedName("timeout_express")
            @JsonProperty("timeout_express")
            private String timeoutExpress;

            @SerializedName("acq_addn_data_order_info")
            @JsonProperty("acq_addn_data_order_info")
            private String acqAddnDataOrderInfo;

            @SerializedName("acq_addn_data_goods_info")
            @JsonProperty("acq_addn_data_goods_info")
            private String acqAddnDataGoodsInfo;

            @SerializedName("front_url")
            @JsonProperty("front_url")
            private String frontUrl;

            @SerializedName("front_fail_url")
            @JsonProperty("front_fail_url")
            private String frontFailUrl;

        }

    }


}
